Google Cloud Kubernetesの公式チュートリアルをやってみた
みなさん、こんにちは!
クルトンです。
今回は、Google Cloudの試験でもよく出てくるGoogle Cloud Kubernetes(以下、GKEと呼称)のチュートリアルをやってみました。
このチュートリアルでは、GKE上にサンプルで既に用意されているコンテナイメージを使って、Webからアクセスできるサイトの公開までを行ないます。
前提
Google Cloudのプロジェクトが作られている状態で開始します。
また、Google Cloud Kubernetesを使うため、APIを有効化しておいてください。 (自分は有効を忘れて実行しましたが、その場合でも回避方法を書いていますのでご参考にしてください。)
Cloud Shellを使用します。
やってみた
最初にCloud Shellを起動します。
次のコマンドでGKEのClusterを用意します。
gcloud container clusters create-auto hello-cluster --location=us-central1
自分の環境では、次のエラーが出ました。
ERROR: (gcloud.container.clusters.create-auto) You do not currently have an active account selected.
どうやら環境の設定が出来ていなかったようです。次のコマンドで設定をします。
gcloud auth login
コマンドを叩くと、Cloud Shell上で、続行するかどうかを聞かれるので "Y" を入力してエンターをします。 その後、同じくCloud Shell上でURLが表示されますのでクリックし、認可コードをコピーします。(認可コードの取得には次の画像のような画面が出ますので、そちらでコピーします。)
認可コードを取得後に、Cloud Shell上へ貼り付けてください。これで認可が完了です。
ちなみに、上記画面の認可の流れですが、次のコマンドを最初に叩けば良かったようです。(チュートリアルにも書いていましたが、見逃していました。)
gcloud config set project PROJECT_ID
認可終わった後に、改めて次のコマンドを実行します。
gcloud container clusters create-auto hello-cluster --location=us-central1
この段階でも次のエラーが出る方がいるかもしれません。
ERROR: (gcloud.container.clusters.create-auto) ResponseError: code=400, message=Failed precondition when calling the ServiceConsumerManager: tenantmanager::[数値の文字列]: Consumer [数値の文字列] should enable service:container.googleapis.com before generating a service account. com.google.api.tenant.error.TenantManagerException: Consumer [数値の文字列] should enable service:container.googleapis.com before generating a service account.
このエラーは要するに、Kubernetes Engine APIが有効化されていないよ!というものなので、有効化してから再実行しましょう。
実行が始まると、次のような内容がCloud Shell上で現れます。Cluster作成で何分か待ちます。
Note: The Pod address range limits the maximum size of the cluster. Please refer to https://cloud.google.com/kubernetes-engine/docs/how-to/flexible-pod-cidr to learn how to optimize IP address allocation. Creating cluster hello-cluster in us-central1... Cluster is being [何か動作(createdやdeployedなど)]...working...
実行が完了すると、Cloud Shell上に次の内容が展開されます。
kubeconfig entry generated for hello-cluster. NAME: hello-cluster LOCATION: [コマンドのlocationオプションで指定したもの。今回はus-central1] MASTER_VERSION: [バージョン情報] MASTER_IP: [IPアドレス] MACHINE_TYPE: [使っているマシンタイプ] NODE_VERSION: [バージョン情報] NUM_NODES: [ノード数] STATUS: RUNNING
次にDeployment(Pod数管理のオブジェクト)を作成します。次のコマンドを叩いてください。
kubectl create deployment hello-server --image=us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
Cloud Shell上に、deployment.apps/hello-server created
が実行結果の最後に表示されたらOKです。
Deploymentが作成されましたら、次のコマンドを叩いて、アプリケーションにアクセスできるようにします。
kubectl expose deployment hello-server \ --type LoadBalancer \ --port 80 \ --target-port 8080
コマンドを叩いてすぐに、 service/hello-server exposed
とCloud Shell上に表示されます。
それでは公開したアプリケーションにアクセスしてみましょう。次のコマンドを叩きます。
kubectl get service hello-server
叩くと、 NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
の6つが表示されます。EXTERNAL-IPに書かれているIPアドレスをコピーして、`http://EXTERNAL-IP`をアドレスバーに入力してページを表示してみてください。(httpsではなく、httpです。)
以上で、コンテナ化されたウェブアプリケーションにアクセスできました。
クリーンアップ
今後も使い続ける場合は除いて、今回作成したリソースを今後課金されないように削除しておきます。
次のコマンドを叩いてください。
kubectl delete service hello-server
削除が完了すると、service "hello-server" deleted
とCloud Shell上で表示されます。
では最後に、Clusterの削除をして終わりです。次のコマンドを叩いてください。
gcloud container clusters delete hello-cluster --location us-central1
Do you want to continue (Y/n)?
と聞かれるので、 "Y" を押してEnterです。
作成時と同様に何分かこのタイミングで待ちます。
Cloud Shell上でDeleting cluster hello-cluster...done.
などと表示されれば削除完了です。
kubectl get pods
やkubectl get service hello-server
などのコマンドを叩いた時に、hello-cluster関係のものが出てこない事がわかります。
終わりに
今回はGKEのチュートリアルをやってみました。 Kubernetesを自分で最初から理解して実行するには、専門知識が多く必要となるサービスではありますが、GKEであれば簡単に実行できました。
チュートリアルでやったコマンドを叩いていけば、自分が実行したいアプリケーションをコンテナ化してArtifact Registryに登録さえすれば簡単に実行できそうですね!(もちろん、本番環境で運用するとなった場合は、セキュリティやネットワークを考慮して他にも必要そうな作業はございます。)
今回はここまで。
それでは、また!